using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Airports._ObstructionIdentificationSurfaces
{
    /// <summary>
    /// <para>ICAO Annex 15</para>
    /// <para>Creates obstruction identification surfaces (OIS) based on the ICAO Annex 15 specification (Areas 2a, 2b, and 2c). These surfaces assist in determining the height restriction or removal of obstacles that pose a hazard to air navigation in and around an aerodrome. This tool creates surfaces as a polygon or multipatch features.</para>
    /// <para>根据国际民航组织附件 15 规范（区域 2a、2b 和 2c）创建障碍物识别表面 （OIS）。这些表面有助于确定高度限制或清除对机场内和周围的空中航行构成危险的障碍物。此工具可将曲面创建为面或多面体要素。</para>
    /// </summary>    
    [DisplayName("ICAO Annex 15")]
    public class ICAOAnnex15 : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ICAOAnnex15()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Runway Features</para>
        /// <para>The input runway dataset. The feature class must be z-enabled and contain polylines.</para>
        /// <para>输入跑道数据集。要素类必须启用 z 并包含折线。</para>
        /// </param>
        /// <param name="_target">
        /// <para>Target OIS Features</para>
        /// <para>The target feature class that will contain the generated obstruction identification surfaces.</para>
        /// <para>将包含生成的障碍物识别表面的目标要素类。</para>
        /// </param>
        public ICAOAnnex15(object _in_features, object _target)
        {
            this._in_features = _in_features;
            this._target = _target;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "ICAO Annex 15";

        public override string CallName => "aviation.ICAOAnnex15";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _target, _highend_clear_way_length, _lowend_clear_way_length, _derived_outfeatureclass, _custom_json_file, _airport_control_point_feature_class];

        /// <summary>
        /// <para>Input Runway Features</para>
        /// <para>The input runway dataset. The feature class must be z-enabled and contain polylines.</para>
        /// <para>输入跑道数据集。要素类必须启用 z 并包含折线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Runway Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Target OIS Features</para>
        /// <para>The target feature class that will contain the generated obstruction identification surfaces.</para>
        /// <para>将包含生成的障碍物识别表面的目标要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target { get; set; }


        /// <summary>
        /// <para>Length of High Runway End Clearway</para>
        /// <para>The length of the area at the high end of the runway. The unit of measurement is based on the input runway features.</para>
        /// <para>跑道高端区域的长度。测量单位基于输入跑道特征。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Length of High Runway End Clearway")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _highend_clear_way_length { get; set; } = 0;


        /// <summary>
        /// <para>Length of Low Runway End Clearway</para>
        /// <para>The length of the area at the low end of the runway. The unit of measurement is based on the input runway features.</para>
        /// <para>跑道低端区域的长度。测量单位基于输入跑道特征。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Length of Low Runway End Clearway")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _lowend_clear_way_length { get; set; } = 0;


        /// <summary>
        /// <para>Output OIS Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_outfeatureclass { get; set; }


        /// <summary>
        /// <para>Custom JSON File</para>
        /// <para>The import configuration, in JSON format, that creates the custom OIS.</para>
        /// <para>用于创建自定义 OIS 的 JSON 格式的导入配置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Custom JSON File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _custom_json_file { get; set; } = null;


        /// <summary>
        /// <para>Input Airport Control Point Feature</para>
        /// <para>Supplies x-, y-, and z-geometry for displaced threshold features. If displaced thresholds are included, surfaces will be constructed based on their x-, y-, and z-geometry instead of their corresponding runway feature endpoint.</para>
        /// <para>为位移阈值特征提供 x、y 和 z 几何。如果包含位移阈值，则将基于其 x、y 和 z 几何构建表面，而不是其相应的跑道要素端点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Airport Control Point Feature")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _airport_control_point_feature_class { get; set; } = null;


        public ICAOAnnex15 SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}